/*
 * Copyright 2008-2012 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.fsquare.controller.catalog;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.broadleafcommerce.core.catalog.domain.Product;
import org.broadleafcommerce.core.web.controller.catalog.BroadleafProductController;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;

import com.fsquare.inventory.domain.SkuInventory;
import com.fsquare.inventory.domain.SkuMovement;
import com.fsquare.inventory.service.InventoryService;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * This class works in combination with the CategoryHandlerMapping which finds a category based upon
 * the passed in URL.
 */
@Controller("blProductController")
public class ProductController extends BroadleafProductController {
    
	@Resource(name = "fsquareInventoryService")
	protected InventoryService inventoryService;
	
	protected static String MODEL_ATTRIBUTE_QUANTITY_NAME = "quantity";
	
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    	
    	ModelAndView model = super.handleRequest(request, response);
    	
    	Product product = (Product) model.getModelMap().get(MODEL_ATTRIBUTE_NAME);
    	SkuInventory skuInventory = inventoryService.getInventory(product.getDefaultSku().getId());
    	
    	Map<String, Object> productMap = new HashMap<String, Object>();
	    productMap.put("productId", product.getId());
	    productMap.put("name", product.getName());
	    productMap.put("description", product.getDescription());
	    productMap.put("longDescription", product.getLongDescription());
	    productMap.put("salePrice", product.getDefaultSku().getSalePrice());
	    productMap.put("retailPrice", product.getDefaultSku().getRetailPrice());
	    productMap.put("url", product.getUrl());
	    productMap.put("availableQuantity", skuInventory.getQuantityAvailable());
	    productMap.put("image", product.getMedia().get("primary").getUrl());
	    
    	
	    model.addObject("productMap", productMap);
        model.addObject(MODEL_ATTRIBUTE_QUANTITY_NAME, skuInventory.getQuantityAvailable());
        model.addObject(MODEL_ATTRIBUTE_NAME, product);
    	
        return model;
    }

}
